Модуль:Навбокс
local navBoxCharacters = {} function navBoxCharacters.navBoxCreate(frame) local args = frame.args --десеаризаця аргументов --второстепенные персонажи local sck = 1 local supportingCharactersTable = {} while argsперсонажи раздел '..sck..' название' and argsперсонажи раздел '..sck do supportingCharactersTablesck = {} supportingCharactersTablesck1 = argsперсонажи раздел '..sck..' название' supportingCharactersTablesck2 = navBoxCharacters.tools.split(argsперсонажи раздел '..sck, '(^%$),', true) sck = sck + 1 end --фоновые персонажи local backgroundCharactersTable = backgroundCharactersTable11 = 'Земные пони 20px|link=Земные пони' backgroundCharactersTable12 = navBoxCharacters.tools.split(argsземные пони', ',') backgroundCharactersTable21 = 'Пегасы 20px|link=Пегасы' backgroundCharactersTable22 = navBoxCharacters.tools.split(argsпегасы', ',') backgroundCharactersTable31 = 'Единороги 20px|link=Единороги' backgroundCharactersTable32 = navBoxCharacters.tools.split(argsединороги', ',') --подготовка элементов --основа local navBox = navBoxCharacters.build.mainBoxCreate() --главные персонажи local mainCharacters = navBoxCharacters.build.mainCharactersCreate() --второстепенные персонажи local data = {'Второстепенные персонажи', 'mw-customcollapsible-supportingCharacters', 'mw-customtoggle-supportingCharacters' } local supportingCharacters = navBoxCharacters.build.sectionCreate(data, supportingCharactersTable) --фоновые персонажи local data = {'фоновые персонажи', 'mw-customcollapsible-backgroundCharacters', 'mw-customtoggle-backgroundCharacters' } backgroundCharacters = navBoxCharacters.build.sectionCreate(data, backgroundCharactersTable) --построение шаблона --главные персонажи navBox:node(mainCharacters) --второтсепенные персонажи if supportingCharacters then navBox:node(supportingCharacters) end --фоновые персонажи if backgroundCharacters then navBox:node(backgroundCharacters) end return navBox end --создание элементов navBoxCharacters.build = {} --основа function navBoxCharacters.build.mainBoxCreate() local mainBox = mw.html.create('div') mainBox:addClass('navBoxOuter') return mainBox end --главные персонажи function navBoxCharacters.build.mainCharactersCreate() local content = , , , , , } local table = navBoxCharacters.build.auxiliary.collapsibleTableCreate('Главные персонажи', 'mw-customtoggle-leadingCharacters') table:attr('id', 'mw-customcollapsible-leadingCharacters') local topLine = mw.html.create('tr') local bottomLine = mw.html.create('tr') bottomLine:css('font-size', '13px') for i = 1, #content do local topTd = mw.html.create('td') local bottomTd = mw.html.create('td') for j = 1, #contenti do topTd:wikitext('[[Файл:'..contentij1..'.png|link='..contentij2..'|'..contentij2..']]') bottomTd:wikitext('[['..contentij2..']] ') end topLine:node(topTd) bottomLine:node(bottomTd) end table:node(topLine) table:node(bottomLine) return table end --создание секции function navBoxCharacters.build.sectionCreate(data, content) local table = navBoxCharacters.build.auxiliary.collapsibleTableCreate(data1, data3) table:attr('id', data2) for i = 1, #content do local text for j = 1, #contenti2 do if j 1 then text = '[['..contenti2j..']]' else text = text..' • '..'[['..contenti2j..']]' end end local line = navBoxCharacters.build.auxiliary.lineCreate(contenti1, text) table:node(line) end return table end --вспомогательные функции navBoxCharacters.build.auxiliary = {} --создание пустой сворачивающейся таблицы с заголовком function navBoxCharacters.build.auxiliary.collapsibleTableCreate(label, class) local table = mw.html.create('table') table:addClass('mw-collapsible mw-collapsed') table:attr('title', 'Показать/Скрыть список') local headerLine = mw.html.create("tr") local header = mw.html.create("td") header:addClass(class..' gradient') header:attr('colspan', '6') header:wikitext(label) headerLine:node(header) table:node(headerLine) return table end --создание строки таблицы function navBoxCharacters.build.auxiliary.lineCreate(title, text) local line = mw.html.create("tr") local leftColumn = mw.html.create("th") leftColumn:addClass('colorlink') leftColumn:wikitext(title) line:node(leftColumn) local rightColumn = mw.html.create("td") rightColumn:wikitext(text) line:node(rightColumn) return line end --служебные функции navBoxCharacters.tools = {} --Краткое описание: Возвращает таблицу, содержащую подстроки строки "str", разделенные элементами строки "separator". Если "reg" - истина, то "separator" вместо строки принимает образец. Несколько сепараторов подряд рассматриваются как один. Если "str" "separator" то возвращается пустой массив.-- function navBoxCharacters.tools.split(str, separator, reg) local result = {} --Проверка строки if(not str or type(str) ~= 'string' or #str 0) then result1 = 'Ошибка 1' result2 = 'Проверь параметр "str"' result3 = 1 return result end --проверка сепаратора if (not separator or type(separator) ~= 'string' or #separator 0) then result1 = 'Ошибка 2' result2 = 'Проверь параметр "separator"' result3 = 2 return result end --Проверка на образец if (not reg) then regExp = true else regExp = false end --переменные позиций local n local k --управляющие переменные local s = 0 local i = 1 --главный цикл while k ~= str:len() do --поиск сепаратора local substring n, k = string.find(str, separator, s + 1, regExp) --если поиск не дал результатов if (k nil or n nil) then resulti = string.sub(str, s + 1, str:len()) break end substring = string.sub(str, s + 1, n - 1) --добавление результата if substring ~= "" then resulti = substring i = i + 1 end s = k end return result end return navBoxCharacters